package cn.iocoder.yudao.module.erp.service.dp;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.dispatchvehicle.vo.DispatchVehicleSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpgz.vo.DpGzPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpgz.vo.DpGzSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dispatchvehicle.DispatchVehicleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpGzDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemGzDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpEastListGzDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpWestListGzDO;

import javax.validation.*;
import java.util.List;

/**
 * ERP广州制单 Service 接口
 * @author 天使管理员
 */
public interface DpGzService {

    /**
     * 创建ERP广州制单
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createDpGz(@Valid DpGzSaveReqVO createReqVO);

    /**
     * ERP广州运单配车
     * @param dispatchNumber
     * @param createReqVO
     * @return
     */
//    Boolean configCar(String dispatchNumber, List<DispatchorderitemGzSaveReqVO> createReqVO);

    /**
     * 更新ERP广州制单
     * @param updateReqVO 更新信息
     */
    void updateDpGz(@Valid DpGzSaveReqVO updateReqVO);

    /**
     * 删除ERP广州制单
     * @param id 编号
     */
    void deleteDpGz(String id);

    /**
     * 获得ERP广州制单
     * @param id 编号
     * @return ERP广州制单
     */
    DpGzDO getDpGz(String id);

    /**
     * 获得ERP广州制单分页
     * @param pageReqVO 分页查询
     * @return ERP广州制单分页
     */
    PageResult<DpGzDO> getDpGzPage(DpGzPageReqVO pageReqVO);

    /**
     * 获得ERP广州制单出库列表
     * @param pageReqVO
     * @return
     */
    PageResult<DpGzDO> dpGzOuterList(DpGzPageReqVO pageReqVO);

    /**
     * ERP广州制单配车出库
     * @param createReqVO
     */
    void dpGzOutStroe(DispatchVehicleSaveReqVO createReqVO);

    /**
     * 获得ERP广州制单入库列表
     * @param dispatchNumber
     * @return
     */
    List<DispatchVehicleDO> dpGzEnterList(String dispatchNumber, Integer line, Integer inventoryStatus, Integer dest,String dpId);

    /**
     * ERP广州运单入库
     * @param createReqVO
     */
    void enterStroeDpGz(List<DispatchVehicleSaveReqVO> createReqVO);


    // ==================== 子表（ERP广州制单货号详情） ====================

    /**
     * 获得ERP广州制单货号详情列表
     * @param no 运单号
     * @return ERP广州制单货号详情列表
     */
    List<DpItemGzDO> getDpItemGzListByNo(String no);

    // ==================== 子表（广州东线清单） ====================

    /**
     * 获得广州东线清单列表
     * @param no 运单号
     * @return 广州东线清单列表
     */
    List<DpEastListGzDO> getDpEastListGzListByNo(String no);

    // ==================== 子表（广州西线清单） ====================

    /**
     * 获得广州西线清单列表
     * @param no 运单号
     * @return 广州西线清单列表
     */
    List<DpWestListGzDO> getDpWestListGzListByNo(String no);

    /**
     * ERP物流广州制单审核
     * @param dpGzDO
     */
    void examineDpGz(DpGzDO dpGzDO);

}